import sys
import os
import hashlib

# 添加项目根目录到系统路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from database import Database

class UserLogin:
    def __init__(self):
        self.db = Database()
        self.current_user = None
    
    def login(self, username, password):
        """
        用户登录
        
        参数:
            username (str): 用户名
            password (str): 密码
        
        返回:
            tuple: (是否成功, 用户信息)
        """
        try:
            if not username or not password:
                print("错误：用户名和密码不能为空")
                return False, None
            
            # 连接数据库
            self.db.connect()
            
            # 查询用户
            self.db.cursor.execute(
                "SELECT id, username, password, role, name, status FROM user WHERE username = ?",
                (username,)
            )
            user = self.db.cursor.fetchone()
            
            if not user:
                print(f"错误：用户名 {username} 不存在")
                return False, None
            
            # 检查用户状态
            if user[5] != 'active':
                print("错误：该用户已被禁用")
                return False, None
            
            # 验证密码
            hashed_password = hashlib.sha256(password.encode()).hexdigest()
            if user[2] != hashed_password:
                print("错误：密码不正确")
                return False, None
            
            # 登录成功
            self.current_user = {
                'id': user[0],
                'username': user[1],
                'role': user[3],
                'name': user[4]
            }
            
            print(f"成功：欢迎 {user[1]}，您已成功登录")
            return True, self.current_user
        except Exception as e:
            print(f"错误：登录时发生错误 - {str(e)}")
            return False, None
        finally:
            self.db.close()
    
    def get_current_user(self):
        """
        获取当前登录用户
        
        返回:
            dict: 当前用户信息
        """
        return self.current_user
    
    def logout(self):
        """
        用户登出
        """
        if self.current_user:
            print(f"成功：{self.current_user['username']} 已登出")
            self.current_user = None
            return True
        return False
    
    def check_permission(self, required_role):
        """
        检查当前用户是否有权限
        
        参数:
            required_role (str): 所需角色
            
        返回:
            bool: 是否有权限
        """
        if not self.current_user:
            print("错误：未登录")
            return False
        
        # 管理员拥有所有权限
        if self.current_user['role'] == 'admin':
            return True
        
        # 经理拥有除管理员外的所有权限
        if self.current_user['role'] == 'manager' and required_role != 'admin':
            return True
        
        # 普通员工只有普通员工权限
        if self.current_user['role'] == required_role:
            return True
        
        print(f"错误：权限不足，需要 {required_role} 权限")
        return False

# 如果直接运行此文件，提供命令行界面
if __name__ == "__main__":
    login_manager = UserLogin()
    
    print("===== 用户登录 =====")
    username = input("请输入用户名: ")
    password = input("请输入密码: ")
    
    success, user = login_manager.login(username, password)
    
    if success and user:
        print(f"\n用户信息:")
        print(f"ID: {user['id']}")
        print(f"用户名: {user['username']}")
        print(f"角色: {user['role']}")
        print(f"姓名: {user['name'] or '未设置'}")
        
        # 测试权限
        print("\n权限测试:")
        print(f"管理员权限: {'有' if login_manager.check_permission('admin') else '无'}")
        print(f"经理权限: {'有' if login_manager.check_permission('manager') else '无'}")
        print(f"普通员工权限: {'有' if login_manager.check_permission('staff') else '无'}")
        
        # 登出
        input("\n按回车键登出...")
        login_manager.logout()